import os

# 配置说明：集中管理 ASR（语音识别）与 VAD（语音活动检测）相关参数，以及临时目录。
# 调参原则：优先保持稳定，其次根据音频类型（清晰语音/有噪声/长录音）微调。

# DEFAULT_LANGUAGE：识别语言
# - "auto" 自动检测（推荐默认）。
# - 可指定固定语言："zh"/"en"/"ja"/"ko"，在语言明确时更稳定更快。
# - 作用位置：传入 ASR 的 generate(language=...) 参数，影响识别与分词模型的语言选择。
DEFAULT_LANGUAGE = "auto"

# BATCH_SIZE_S：ASR 内部批处理窗口时长（秒）
# - 仅用于“生成文章”（整段识别）时，控制一次送入模型的最大音频长度。
# - 值越大：吞吐更高、内存占用更高；值越小：更稳但速度稍慢。
# - 建议范围：30～120，根据机器性能与音频长度调整。
BATCH_SIZE_S = 60

# MERGE_VAD：是否按照 VAD 结果合并相邻片段（文章模式）
# - True：将紧邻的小段合并成更长段，减少切分，提高文本连贯性和上下文一致性。
# - False：不合并，严格按内置 VAD 切分，时间戳更精确但文本更碎。
MERGE_VAD = True

# MERGE_LENGTH_S：合并的目标近似长度（秒）（文章模式）
# - 与 MERGE_VAD 搭配使用，用于控制合并后的片段大致长度。
# - 建议范围：10～30；过大可能导致时间戳粗糙，过小则段落偏碎。
MERGE_LENGTH_S = 15

# VAD_MAX_SEGMENT_MS：外部 VAD 单段最大时长（毫秒）（字幕模式）
# - 影响字幕分段长度：更大生成更长字幕，更小字幕更细碎。
# - 建议范围：15000～30000，根据语速与可读性选择。
VAD_MAX_SEGMENT_MS = 20000

# VAD_END_SILENCE_MS：段尾允许的最大静音（毫秒）（字幕模式）
# - 值越小分段更敏感、越大更连续；过大可能跨越自然停顿。
# - 建议范围：200～800，常用 250～500。
VAD_END_SILENCE_MS = 250

# ASR_VAD_MAX_SEGMENT_MS：ASR 内置 VAD 单段最大时长（毫秒）（文章模式）
# - 控制整段识别时内部切分的最长片段；更大更连贯，过大可能影响稳定或耗时。
# - 建议范围：20000～60000，根据录音长度与机器性能调整。
ASR_VAD_MAX_SEGMENT_MS = 30000

# TMP_DIR：临时目录位置
# - 所有抽取出的临时音频、分段导出文件统一存放在此目录。
# - 服务运行时自动创建；处理完成后会尽量清理临时文件。
TMP_DIR = os.path.join(os.getcwd(), "tmp")

# MODELS_DIR：模型缓存与下载目录（避免占用系统盘）
# - 所有模型（ASR 与 VAD）统一下载到项目的 models 目录下。
# - 子目录：HuggingFace 与 ModelScope 分别使用各自缓存路径。
MODELS_DIR = os.path.join(os.getcwd(), "models")
HF_CACHE_DIR = os.path.join(MODELS_DIR, "huggingface")
MS_CACHE_DIR = os.path.join(MODELS_DIR, "modelscope")

# GRADIO_SERVER_PORT：Gradio 界面端口（可通过环境变量 GRADIO_SERVER_PORT 覆盖）
GRADIO_SERVER_PORT = int(os.getenv("GRADIO_SERVER_PORT", "7860"))